Продвинутое машинное обучение: ДЗ №1

Булаев Владимир, группа DS-22, 18-27.02.2021

Внимание! Для корректного отображения графиков plotly в оффлайн-режиме необходимо сделать jupyter-notebook Trusted (в меню справа).

Содержание:

Часть I. О теореме Байеса

Условие задачи: Произошло убийство. На месте убийства найдена кровь, которая явно (будем считать, что с вероятностью 1) принадлежит настоящему убийце. Кровь принадлежит редкой группе, которая присутствует всего лишь у 1% населения. И так получилось, что у подсудимого как раз эта редкая группа крови!

I.1. Довод прокурора

“Шанс, что у подсудимого была бы именно такая группа крови, если бы он был невиновен - всего 1%; значит, с вероятностью 99% он виновен, предлагаю осудить”. В чём не прав прокурор? Укажите, какие вероятности он оценил, а какие должен был оценить.

Ответ: на суде прокурор оценил вероятность того, что у подсудимого будет редкая группа крови при условии, что он убийца. На самом деле он должен был оценить вероятность того, что подозреваемый является убийцей при условии, что у него редкая группа крови.

К содержанию

I.2. Довод адвоката

“В городе живёт миллион человек. Это значит, что примерно у 10000 из них такая группа крови. Значит, всё, что говорит нам эта кровь - это то, что подсудимый совершил убийство с вероятностью 0.01%. Получается, что это свидетельство не просто не является строгим доказательством, а и вовсе даёт нам ничтожно малую вероятность того, что мой подзащитный виновен, так что предлагаю исключить его из материалов дела”. В чём не прав адвокат? Какие вероятности он оценил, а какие должен был оценить?

Ответ: на суде адвокат оценил вероятность того, что случайно выбранный житель города может быть убийцей при условии, что у него редкая группа крови. На самом деле он должен был оценить вероятность того, что подозреваемый может быть убийцей при условии, что у него редкая группа крови.

К содержанию

I.3. Задача про страшную болезнь

Условие задачи: Вернёмся к тесту на страшную болезнь из первой лекции. Напомню, что по предположениям задачи болеет 1% населения, а тест имеет вероятность ошибки 5% в обе стороны. Мы видели, что в результате человек с положительным тестом имеет апостериорную вероятность оказаться больным всего лишь около 16%. Врачи решили, что терпеть это никак нельзя; они готовы провести срочное исследование и улучшить качество теста. Но сил и денег хватит только для того, чтобы сократить один тип ошибок, т.е. уменьшить или только число false positives (когда тест выдаёт положительный результат у здорового человека), или только число false negatives (когда тест выдаёт отрицательный результат у больного). Помогите медикам: постройте зависимости апостериорной вероятности болезни после положительного и отрицательного теста от обоих видов ошибок (например, в виде графиков), сделайте выводы и дайте рекомендации врачам - на чём лучше сосредоточиться?

Решение

Распишем вероятности, которые фигурируют в задаче:
P(sick) - вероятность иметь страшную болезнь. По условию P(sick) = 0.01
P(good) - вероятность не иметь страшную болезнь. P(good) = 1 - P(sick) = 0.99
P("+") - вероятность того, что тест на страшную болезнь будет положительным
P("-") - вероятность того, что тест на страшную болезнь будет отрицательным. P("-") = 1 - P("+")
P("-" | sick) = P(false negatives) = FN - вероятность отрицательного теста при условии, что человек болен. P("-" | sick) + P("+" | sick) = 1. По условию задачи, вероятности ошибки тестов в обе стороны (т.е. false negatives и false positives) изначально одинаковы и равны 0.05
P("+" | sick) - вероятность положительного теста при условии, что человек болен. P("+" | sick) = 1 - P("-" | sick) = 0.95
P("+" | good) = P(false positives) = FP - вероятность положительного теста при условии, что человек не болен. Изначально P("+" | good) = 0.05. P("+" | good) + P("-" | good) = 1
P("-" | good) - вероятность отрицательного теста при условии, что человек не болен. P("-" | good) = 1 - P("+" | good) = 0.95

Необходимо найти:
P(sick | "+") - апостериорная вероятность болезни после положительного теста
P(sick | "-") - апостериорная вероятность болезни после отрицательного теста
Для этого воспользуемся формулой Байеса:

$$P(sick | "+") = \frac{P("+" | sick) \cdot P(sick)}{P("+")}$$

Распишем P("+"), используя формулу полной вероятности, и получим апостериорную вероятность болезни после положительного теста:

$$P(sick | "+") = \frac{P("+" | sick) \cdot P(sick)}{P("+" | sick) \cdot P(sick) + P("+" | good) \cdot P(good)}$$

Используя аналогичные рассуждения, получим формулу для оценки апостериорной вероятности болезни после отрицательного теста:

$$P(sick | "-") = \frac{P("-" | sick) \cdot P(sick)}{P("-" | sick) \cdot P(sick) + P("-" | good) \cdot P(good)}$$

К содержанию

Анализ апостериорной вероятности болезни после положительного теста

Распишем формулу для вычисления апостериорной вероятности болезни после положительного теста. Учитывая, что
P("+" | good) = FP
P("+" | sick) = 1 - P("-" | sick) = 1 - FN
подставив численные значения, получим окончательную формулу:

$$P(sick | "+")=\frac{(1-FN)\cdot P(sick)}{(1-FN)\cdot P(sick) + FP\cdot P(good)}=\frac{0.01-0.01FN}{0.01-0.01FN + 0.99FP}$$

Для анализа поведения функции P(sick | "+") в зависимости от значений FN и FP построим ее график

Общий характер зависимости такой: чем меньше значение FN и FP, тем выше апостериорная вероятность болезни при условии положительного теста.

Для принятия решения о том, на улучшении какого из показателей лучше сконцентрировать исилия, на графике приведены поперечные сечения вдоль осей FN и FP. Белыми линиями показано сечение целевой функции вертикальными плоскостями, параллельными оси FP (т.е. зависимость величины целевой функции P(sick|"+") от изменения значение FP при фиксированном FN).
Малиновыми линиями показано сечение целевой функции вертикальными плоскостями, параллельными оси FN (т.е. зависимость величины целевой функции P(sick|"+") от изменения значение FN при фиксированном FP).

Поскольку по условиям задачи изначально FN и FP были равны 0.05, рассмотрим более детально диапазон изменений FN и FP: [0, 0.1]

Важно, чтобы апостериорная вероятность болезни после положительного теста возрастала. Для этого необходимо уменьшать значения FP и FN. Но на графике видно, что уменьшение FN при фиксированном FP ведет к незначительному росту целевой функции (малиновые линии носят характер парабол, причем в интервале [0, 0.1] они находятся в зоне насыщения).

В то же время влияние изменения FP при фиксированном FN на целевую функцию носит гиперболический характер - небольшое уменьшение FP сильнее увеличивает целевую функцию, чем аналогичное изменение FN.

Вывод: для увеличения апостериорной вероятности болезни при условии положительного теста лучше сконцентрировать усилия по уменьшению вероятности false positive.

К содержанию

Анализ апостериорной вероятности болезни после отрицательного теста

Распишем формулу для вычисления апостериорной вероятности болезни после положительного теста. Учитывая, что
P("-" | sick) = FN
P("-" | good) = 1 - P("+" | good) = 1 - FP
подставив численные значения, получим окончательную формулу:

$$P(sick | "-")=\frac{FN\cdot P(sick)}{FN\cdot P(sick) + (1-FP)\cdot P(good)}=\frac{0.01FN}{0.99+0.01FN-0.99FP}$$

Для анализа поведения функции P(sick | "-") в зависимости от значений FN и FP построим ее график

Общий характер зависимости такой: чем меньше значение FN и FP, тем ниже апостериорная вероятность болезни при условии отрицательного теста.

По аналогии, здесь белыми линиями показано сечение целевой функции вертикальными плоскостями, параллельными оси FP (т.е. зависимость величины целевой функции P(sick|"-") от изменения значение FP при фиксированном FN). Малиновыми линиями показано сечение целевой функции вертикальными плоскостями, параллельными оси FN (т.е. зависимость величины целевой функции P(sick|"-") от изменения значение FN при фиксированном FP).

Поскольку по условиям задачи изначально FN и FP были равны 0.05, рассмотрим более детально диапазон изменений FN и FP: [0, 0.1]

Важно, чтобы апостериорная вероятность болезни после отрицательного теста снижалась. Для этого необходимо уменьшать значения FP и FN. На графике видно, что уменьшение FN при фиксированном FP ведет к более существенному снижению целевой функции (малиновые линии имеют более сильнй наклон, чем белые).

В то же время влияние изменения FP при фиксированном FN на целевую функцию носит слабый характер.

Вывод: для снижения апостериорной вероятности болезни при условии отрицательного теста лучше сконцентрировать усилия по уменьшению вероятности false negative.

К содержанию

Совместный анализ апостериорных вероятностей

Возникает дилемма:

Чтобы принять окончательное решение, что же лучше всего делать врачам в данной ситуации, составим целевую функцию target, равную разности апостериорных вероятностей болезней после получения положительного и отрицательного теста:

$$Target=P(sick|"+")-P(sick|"-")$$

Разность была использована потому, что:

Максимизация выбранной целевой функции будет увеличивать апостериорную вероятность болезни после положительного теста и снижать апостериорную вероятность болезни после отрицательного теста.

Рассмотрим поведение графика этой функции в диапазоне изменений FN и FP: [0, 0.1]

Важно, чтобы целевая функция возрастала. Для этого необходимо уменьшать значения FP и FN. Но на графике видно, что уменьшение FN при фиксированном FP ведет к незначительному росту целевой функции (малиновые линии носят пологий характер).

В то же время влияние изменения FP при фиксированном FN на целевую функцию носит гиперболический характер - небольшое уменьшение FP сильнее увеличивает целевую функцию, чем аналогичное изменение FN.

Несмотря на тот факт, что уменьшение FP не так выигрышно для снижения апостериорной вероятности болезни после отрицательного теста, это с большим запасом компенсируется выигрышем от возрастания апостериорной вероятности болезни после положительного теста.

Ответ: в целом врачам лучше сконцентрировать усилия по уменьшению вероятности false positive.

К содержанию

Часть II. О линейной регрессии

Эта часть первого домашнего задания связана с анализом конкретного датасета. Датасет давайте возьмём довольно релевантный реальной жизни; он доступен по следующей ссылке: https://ourworldindata.org/coronavirus-source-data

II.1. Загрузка данных

Скачайте данные в формате csv, выберите из таблицы данные по России, начиная с 3 марта 2020 г. (в этот момент впервые стало больше 2 заболевших). В качестве целевой переменной возьмём число случаев заболевания (столбцы total_cases и new_cases); для упрощения обработки можно заменить в столбце new_cases все нули на единицы. Для единообразия давайте зафиксируем тренировочный набор в виде первых 50 отсчётов (дней), начиная с 3 марта; остальные данные можно использовать в качестве тестового набора (и он даже будет увеличиваться по мере выполнения задания). Иначе говоря, мы будем “играть” за российские власти, которые пытаются понять, что делать, глядя на данные об эпидемии в мае 2020 года.

Сделаем предобработку данных:

Постройте графики целевых переменных. Вы увидите, что число заболевших растёт очень быстро, на первый взгляд экспоненциально. Для первого подхода к снаряду давайте это и используем.

Экспоненциальный рост количества вновь заболевших наблюдается только примерно в первые 60-65 дней, а также в период со 170 по 230 день.

По исходным данным видно, что:

К содержанию

II.2. Использование экспоненциальной модели

Экспоненциальная зависимость будет использована для моделирования количества вновь заболевших людей (new_cases).

II.2.a. Линейная модель для экспоненциальной зависимости

Используя линейную регрессию, обучите модель с экспоненциальным ростом числа заболевших: y ~ exp(линейная функция от x) , где x — номер текущего дня.

Распишем подробнее входные и выходные данные. В задаче требуется построить модель для предсказания количества заболевших людей в определенный момент времени, начиная с некоторой начальной даты (для России - с 3 марта 2020 г.). Таким образом, входы для модели - это номера дней от даты старта, т.е. x - это целое число. Целевая переменная y - количество заболевших людей (целое неотрицательное число), значит мы решаем задачу регрессии.

Рассматриваемая зависимость носит экспоненциальный характер. Пусть планируемая к использованию линейная модель имеет вектор весов w, итоговое соотношение можно представить в виде формулы: $$y \sim e^{w^Tx}$$
Логарифмируя выражение, получим:
$$ln(y) \sim w^Tx$$
При этом будем предполагать, что изначально шум в данных носит логнормальный характер, и после логарифмирования мы получим нормальное распределения шума, что позволяет нам использовать линейную регрессию для решения задачи.

К содержанию

II.2.b. Апостериорное распределение параметров

Найдите апостериорное распределение параметров этой модели для достаточно широкого априорного распределения. Требующееся для этого значение дисперсии шума в данных оцените, исходя из вашей же максимальной апостериорной модели (это фактически первый шаг эмпирического Байеса).

Чтобы найти апостериорное распределения параметров модели, необходимо оценить дисперсию шума в данных, которую в свою очередь можно рассчитать как среднее значение квадратов отклонений целевой переменной от предсказанного значения: $$\sigma^2=\frac{1}{N}\sum_n{(y_n-w^Tx_n)^2}$$ В качестве модели для предсказаний можно было бы взять обученную в предыдущем разделе модель, но в условии задания сказано, что нужно сделать оценку дисперсии "исходя из вашей же максимальной апостериорной модели".

Для этого предлагается воспользоваться следующим приемом. Обучим Ridge-регрессию, что будет эквивалентно поиску апостериорной модели. Поскольку априорное распределение можно взять достаточно широким, коэффициент регуляризации сделаем небольшим. После обучения найдем дисперсию шума данных, используя предсказания этой Ridge-регрессии. Полученную дисперсию шума используем впоследствии для того, чтобы получить апостериорное распределение параметров нашей базовой линейной модели из раздела II.2.a.

Как видно из результатов, параметры базовой и вспомогательной моделей отличаются весьма незначительно. Рассчитаем дисперсию шума, пользуясь вспомогательной моделью, и сравним его с базовой:

Как видно из результатов сравнения, дисперсии шума исходных данных, рассчитанные по базовой и вспомогательной моделям, отличаются незначительно

Теперь выберем параметры априорного распределения. В условии сказано, что это распределение может быть "достаточно широкое". Очевидно, что его центр будет в нуле, а дисперсию сделаем такого размера, чтобы она включала в себя точку с параметрами базовой модели: $$\sigma^2=1$$

Таким образом, выберем априорное распределение с единичной матрицей ковариации. $$p(w)=\mathcal{N}(w|\mu_0,\Sigma_0)=\mathcal{N}(w|0,\sigma^2 I)$$

С учетом вышесказанного, апостериорное распределение параметров модели будет иметь следующий вид: $$p(w|D) = \mathcal{N}(w|\mu,\Sigma)$$ $$\Sigma^{-1} = \Sigma_{0}^{-1} + \frac{1}{\sigma^2}X^TX$$ $$\mu = \Sigma (\Sigma_{0}^{-1} \mu_0 + \frac{1}{\sigma^2}X^Ty)$$

К содержанию

II.2.c. Сэмплирование экспонент

Посэмплируйте много разных экспонент, постройте графики. Сколько, исходя из этих сэмплов, предсказывается случаев коронавируса в России к 1 мая 2020 года? к 1 июня? к 1 сентября? Постройте предсказательные распределения (можно эмпирически, исходя из данных сэмплирования).

Рассчитаем количество новых случаев коронавируса, используя сэмплированные значения из апостериорного распределения параметров модели. Для этого по каждому семплу весов модели построим предсказание и усредним значение.

Как видно по результатам предсказания, чем позже мы вибираем дату прогноза от обучающего периода, тем более пессимистический прогноз делает модель.

Вывод: как и предполагалось ранее при визуальном анализе графиков, использование экспоненциальной модели для описания поведения реального количества вновь заболевших оказалось черезчур пессимистичным.
К содержанию

II.3. Использование сигмоидной модели

Предсказания экспоненциальной модели наверняка получились грустными. Но это, конечно, чересчур пессимистично — экспоненциальный рост в природе никак не может продолжаться вечно. Кривая общего числа заболевших во время эпидемии в реальности имеет сигмоидальный вид: после начальной фазы экспоненциального роста неизбежно происходит насыщение. В качестве конкретной формы такой сигмоиды давайте возьмём форму функции распределения для гауссиана (https://en.wikipedia.org/wiki/Probit_model):

$$\Phi(x) = \frac{1}{\sqrt{2\pi}}\int_{-\infty}^{x}e^{-t^2/2}dt$$

Естественно, в нашем случае сигмоида стремится не к единице, т.е. константа перед интегралом может быть произвольной (и её можно внести в экспоненту), а в экспоненте под интегралом может быть произвольная квадратичная функция от t

К содержанию

II.3.a. Линейная модель для сигмоиды

Предложите способ обучать параметры такой сигмоидальной функции при помощи линейной регрессии.

Будем исходить из следующих соображений. Разность общего количество больных за два последовательных дня будет равна суточному приросту количества заболевших. Отюда следует, что модель, описывающая общее количество заболевших, с точностью до постоянного множителя является первообразной для функции суточного прироста больных. Таким образом, если мы предполагаем, что характер изменения общего количества заболевших описывается вышеупомнутой формулой, то в этом случае суточный прирост количества больных должен быть пропорциональным производной Ф'(x), т.е. подинтегральным выражением: $$\Phi'(x) \sim "newcases" \implies "newcases" \sim e^{-x^2/2}$$
Для описания этой зависимости с помощью линейной модели прологарифмируем выражение, и используем линейную модель, на вход которой помимо исходного признака (время с начала анализа) будем также подавать квадрат его значения:
$$ln(y_{newcases}) \sim w^Tx_n$$ $$x_n = (x^2, x, 1)^T$$

После обучения модели для обратного перехода к прогнозу общего количества заболевших, используем следующую формулу: $$\Phi(x) \sim \sum_{i=0}^x e^{y_{newcases}}$$

К содержанию

II.3.b. Апостериорное распределение параметров

Обучите эти параметры на датасете случаев коронавируса в России. Найдите апостериорное распределение параметров этой модели для достаточно широкого априорного распределения. Требующееся для этого значение дисперсии шума в данных оцените, исходя из вашей же максимальной апостериорной модели.

Данный пункт задания будем делать по аналогии с тем, как делали в II.2.b

К содержанию

II.3.c. Сэмплирование сигмоид

Посэмплируйте много разных сигмоид из апостериорного распределения, постройте графики. Сколько, исходя из этих сэмплов, будет всего случаев коронавируса в России? Постройте эмпирическое предсказательное распределение, нарисуйте графики. Каков ваш прогноз числа случаев коронавируса в пессимистичном сценарии (90-й процентиль в выборке числа случаев)? В оптимистичном сценарии (10-й процентиль)?

Предскажем общее число случаев коронавируса, используя сэмплированные значения из апостериорного распределения параметров модели. Для этого по каждому семплу весов модели построим предсказание и усредним значение.
К содержанию

Примечание: на первый взгляд может показаться странным, что предсказания не выходят на асимптоту с увеличением даты. Этот факт объясняется тем, что мы делаем усредненный прогноз по всем сэмплированным сигмоидам. Как можно видеть на рисунке выше, сэмплы в наборе случайны, и среди набора часто оказывается такая сигмоида, которая насыщается очень далеко. Суммирование такой сигмоиды со всеми остальными (даже если те уже насытились) в итоге даст ненасыщенную кривую.
К содержанию

К содержанию

II.4. Анализ по другим странам

К содержанию

II.4.1. Экспоненциальная модель

На примере Индии экспоненциальная модель роста количества новых больных не очень хорошо аппроксимирует даже начальный участок кривой. Видимо, рост был более сглаженный характер.
К содержанию

II.4.2. Сигмоидная модель

На примере Индии настроить адекватные параметры сигмоидной модели удалось только после обучения на 300 примерах.
К содержанию

Сравнение результатов по странам

Параметры экспоненциальной модели для России:
[0.3206875188996481, 0.18596309168510516]
Параметры экспоненциальной модели для Индии:
[0.3983174113384971, 0.10039557194975593]

Параметры моделей экспоненциального роста числа новых больных достаточно похожи. Это неудивительно, поскольку для настройки моделей использовалась начальная часть данных, которые визуально носили взрывной характер, и данная особенность проявлялась практически во всех странах. Поэтому можно сделать осторожный нестрогий вывод, что использовать параметры экспоненциальной модели для кластеризации стран скорее всего нецелесообразно.

Другая ситуация с параметрами сигмоидальных моделей:

Параметры сигмоидной модели для России:
[-0.39659040284162383, 0.2756228319027641, -0.0018297906166869166]
Параметры сигмоидной модели для Индии:
[0.8017305707324187, 0.10476955381037044, -0.00025439020274466053]

Видно, что коэффициенты отличаются от 2-х раз до почти десяти. Возможно, это объясняется разным характером протекания болезни в различных странах, и/или принятием определенных мер руководством страны. Использование параметров сигмоидных моделей видится более перспективным в качестве критериев для кластеризации стран.

К содержанию